Chromebook 安装 Debian 12 testing

缘起

本来这台 HP Chromebook 11A G6 EE( 加了一张 128G 的 TF 卡 ),我安装好了 Arch Linux(Xfce),都弄好了的,但最近在知乎上老被安利说装 Debian 的 testing 版,于是我又开始折腾,把 Debian 13 testing(trixie) 安装到这台 Chromebook 上。

安装时,使用 lvm 分区不成功,系统报错:

partman-lvm: pvcreate: error while loading shared libraries: libaio.so.1: cannot open shared object file: no such file or directory

现在想想可能还有其他办法,比如想办法把这个需要的包注入进去,但当时选择了先用 ext4 分区安装系统自带的 16G 的卡里,装完以后再想办法转成 lvm 并把 TF 卡的空间加进来。

具体步骤

ext4 在自带存储上安装

自带存储的设备号是:/dev/mmcblk1,容量只有 16G

这一步基本上没什么问题,我只讲一下最后自带存储的分区:

  • 分区 1,vfat 格式,挂在 /boot/efi
  • 分区 2,ext4 格式,挂在 /

将 / 迁移到 TF 卡(lvm)

这一步应该是重中之重,难度、复杂度都在这里。

处理 TF 卡

TF 卡的设备号是:/dev/mmcblk0,容量 128G

1
2
3
4
5
6
7
8
9
10
11
apt-get install lvm
# 系统原来没装 lvm
wipefs -fa /dev/mmcblk0
# TF 卡上原来有数据,所以需要先 wipefs 干一下
pvcreate /dev/mmcblk0
# 也可以先对设备分区了再创建 pv,但也可以直接在裸设备上做
vgcreate vg_root /dev/mmcblk0
lvcreate -L 116G -n lv_root vg_root
# TF 卡容量是 128G,可用为 116G 多一些,这里 lv 设 116G 大小,
# 其实多大没关系(因为 lv 是随时可以扩的),但只要小于可用的就行
mkfs.ext4 /dev/vg_root/lv_root

迁移数据到 /dev/vg_root/lv_root

1
2
3
4
5
6
7
8
9
mkdir /mnt/new_root
# 创建挂载点
mount /dev/vg_root/lv_root /mnt/new_root
# 把新的根区挂载上
tar -cvpf - --one-file-system --acls --xattrs \
--selinux / | tar -C /mnt/new_root -xf -
# 把数据倒到新的根区上
cp -aux /dev /mnt/new_root
# 把 /dev 下有更新的内容拷贝过来

接着还要修改新根区下 etc/fstab 的内容,将挂载在 / 的设备改成 /dev/vg_root/lv_root

1
2
vi /mnt/new_root/etc/fstab
# 这里之所以用 vi 而不是 vim 那是因为 vim 这个软件还尚未安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mount --bind /dev /mnt/new_root/dev
chroot /mnt/new_root
mount -t proc /proc /proc
mount -t sysfs /sys /sys
vgscan
vgchange -ay
mkinitramfs -o /boot/initrd-`uname -r`.lvm.img `uname -r`
# 上面这一步我感觉应该可以不做,因为上面 `apt-get install lvm`
# 时我貌似有看到重新制作 initrd 的 image 的情况,看吧,
# 这一句的目的是为了给 initrd 的 image 文件添加 lvm 的支持
exit
# 退出 chroot 状态
cp /mnt/vg_root/lv_root/boot/initrd-`uname -r`.lvm.img /boot
# 上面这一句我感觉其实也可以不做,因为老 / 区最终是要被干掉的呀

最后的收尾工作:

  • 修改 /mnt/new_root/boot/grub/grub.conf 的内容,最好新增一条 menuentry,内容拷贝原有的
    • 把显示的名字改了
    • 把 initrd 的 image 文件改成前面新做成的 initrd 的 image 文件
    • 如果还有涉及到 root 的 uuid 什么的,也要将原来的设备的 uuid 改成新 root 的设备 /dev/vg_root/lv_root 的 uuid(命令 blkid 里可以看到,注意:有的设备有 UUID 还有 PARTUUID,一般来讲原来用的是哪个替换的时候也要用哪个替换,如果没有对应的,那么就用 UUID 来替换)
  • 修改文件 /boot/efi/EFI/debian/grub.cfg,同样也是做 uuid 的替换

最后,重启系统迁移这一步应该就好了

1
shutdown -r now

将自带存储加入新 / 区的 lv

自带的存储的设备是:/dev/mmcblk1,老根区的设备号是:/dev/mmcblk1p2

电脑重新起来后,登录进去

1
2
3
4
5
6
7
8
9
wipefa -fa /dev/mmcblk1p2
pvcreate /dev/mmcblk1p2
# 创建 pv(physical volume)
vgextend vg_root /dev/mmcblk1p2
# 将老根分区所在存储加入到 vg_root 这个 vg(volume group) 里来
lvextend -l +100%FREE /dev/vg_root/lv_root
# 将 lv_root 这个 lv(logical volume) 的大小扩展到所有未用空间
resize2fs /dev/vg_root/lv_root
# 将 lv_root 这个 lv 上的 ext4 文件系统的大小扩展到整个 lv

如此,便完成了。